"""
1. 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那两个整数，并返回它们的数组下标。
你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1：

输入：nums = [2,7,11,15], target = 9
输出：[0,1]
解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
示例 2：

输入：nums = [3,2,4], target = 6
输出：[1,2]
示例 3：

输入：nums = [3,3], target = 6
输出：[0,1]

要求：时间复杂度小于O(n^2)
"""

#1.自己想到的解法
#时间复杂度O(n^2)，空间复杂度O(1)
#index内置函数会再次遍历列表
def sum_of_num(nums, target):
    for i, n in enumerate(nums):
        complete = target - n
        if complete in nums:
            index = nums.index(complete)
            if index != i:
                return [i, index]

#2.优化解法
#时间复杂度O(n),空间复杂度O(n)
def correct_sum_of_nums(nums, target):
    num_dict = {}
    for i, n in enumerate(nums):
        complete = target - n
        if complete in num_dict:
            return [i, num_dict[complete]]
        num_dict[n] = i

if __name__ == '__main__':
    # nums = [2, 7, 11, 15]
    # target = 9
    # nums = [3, 2, 4]
    # target = 6
    nums = [3, 3]
    target = 6
    # print(sum_of_num(nums, target))
    print(correct_sum_of_nums(nums, target))


